Communications networks have existed for decades. To route datagrams, such as packets, cells, etc., through such networks, each routing node in the networks may rely on forwarding tables. Forwarding tables provide routing nodes with instructions for forwarding a received datagram “one hop” further towards its destination. Specifically, a routing node can inspect one or more fields in a datagram, look up a corresponding entry in a forwarding table, and then put the datagram on the indicated queue for outbound transmission across one of a group of outbound links associated with the routing node.
Many variants exist on how to build and use forwarding tables. Many existing routing nodes, for instance, create multiple forwarding tables. Then, when a datagram arrives, the routing node selects which forwarding table should be used for this particular datagram. The choice of forwarding table typically depends on the protocol used by the datagram, the datagram's relative priority, or the like.
When failures occur in the network (e.g., a link fails), the routing nodes may often need to be supplied with (or need to generate) new forwarding tables to allow the nodes to route datagrams around the failures, which can cause delays in the network. Therefore, there exists a need to improve data routing in communications networks.